#ifndef __LINK_H__
#define __LINK_H__

/*********************************************************************
 * INCLUDES
 */

#ifdef __cplusplus
extern "C" {
#endif

/*********************************************************************
 *  EXTERNAL VARIABLES
 */

/*********************************************************************
 * MACROS
 */

/*********************************************************************
 * TYPES
 */

typedef struct _slink_node
{
    struct _slink_node *pNext;
} SLINK_NODE_S;            /* ½ÚµãµÄ½á¹¹ */

typedef struct _slink
{
    SLINK_NODE_S *pstHead;
    SLINK_NODE_S *pstTail;
    uint32_t uiCount;
} SLINK_S;          /* µ¥ÏòÁ´±íµÄ½á¹¹ */

/*********************************************************************
 * FUNCTIONS
 */

/**
 *   @Description: Á´±í³õÊ¼»¯£¬¶ÓÁÐÉ¾³ýÐèÒªÊ¹ÓÃÕß×ÔÐÐ±éÀúÊÍ·ÅÄÚ´æ
 *   @param: pstLink - Èë²Î, Á´±íÍ·Ö¸Õë
 *   @return £ºÁ´±íµØÖ·
 */
SLINK_S *SLINK_Init(SLINK_S *pstLink);

/**
 *   @Description: ×·¼ÓÁ´±í½Úµã
 *   @param: pstLink - Èë²Î£¬Á´±íÍ·Ö¸Õë
 *   @param: pstLinkNode - Èë²Î£¬¶ÓÁÐÐÂ½Úµã
 *   @return £º´íÎóÐÅÏ¢
 */
int32_t SLINK_Append(SLINK_S *pstLink, SLINK_NODE_S *pstLinkNode);

/**
 *   @Description: ÔÚÁ´±íÇ°²åÈëÐÂ½Úµã
 *   @param: pstLink - Èë²Î£¬Á´±íÍ·Ö¸Õë
 *   @param: pstLinkNode - Èë²Î£¬Á´±íÐÂ½Úµã
 *   @return £º´íÎóÐÅÏ¢
 */
int32_t SLINK_InsertFront(SLINK_S *pstLink, SLINK_NODE_S *pstLinkNode);

/**
 *   @Description: »ñÈ¡Á´±í½Úµã
 *   @param: pstLink - Èë²Î£¬Á´±íÍ·Ö¸Õë
 *   @return £ºÁ´±í½ÚµãµØÖ·
 */
SLINK_NODE_S *SLINK_Peek(SLINK_S *pstLink);

/**
 *   @Description: É¾³ýÁ´±í½Úµã
 *   @param *pstLink - Èë²Î£¬Á´±íÍ·Ö¸Õë
 *   @param *pstLinkNode - ÒªÉ¾³ýµÄÁ´±í½Úµã
 *   @return £º_OK / _ERR
 */
int32_t SLINK_DeleteNode(SLINK_S *pstLink, SLINK_NODE_S *pstLinkNode);

/**
 *   @Description: ÅÐ¶ÏÁ´±íÊÇ·ñÎª¿Õ
 *   @param *pstLink - Èë²Î£¬Á´±íÍ·Ö¸Õë
 *   @return £º_TRUE / _FALSE
 */
bool SLINK_IsEmpty(SLINK_S *pstLink);

#ifdef __cplusplus
}
#endif /* end of __cplusplus */

#endif

/************************************** The End Of File **************************************/




